// 基础试例
// let handler = {
//     get:function(obj, prop){
//         console.log(obj + '-----obj');
//         console.log(prop + '----prop');
//         return prop in obj ? obj[prop] : 37
//     }
// };

// const p = new Proxy({}, handler);
// p.a = 1;
// p.b = undefined;
// console.log(p.a, p.b);
// console.log('c' in p, p.c );


// 无操作转发代理
// 在以下例子中， 我们使用了一个原生javascript对象， 代理将会把所有应用到他的操作都会转发到这个对象上
// let target = {}
// let p = new Proxy(target,{})
// p.a = 37;

// console.log(p,'----p');
// console.log(target,target.a)


//  验证  通过代理，你可以轻松的验证向一个对象传值 。下面代码展示了 set handler 的作用

let validator = {
    set: (obj, prop, value, receiver) => {
        if( prop === 'age' ){
            if (!Number.isInteger(value)) {
                throw new RangeError('The age is not an integer')
            }
            if( value > 200 ){
                throw new RangeError(' The age seems invalid ');
            }
        }
        obj[prop] = value;
        //表示成功
        return true
    }
}
let person = new Proxy({}, validator)

person.age = 100;
console.log(person.age);

person.age = 'hui'
console.log(person.age) // The age is not an integer

person,age = 300
console.log(person.age) // The age seems invalid 

